package cn.ubest.mvvmcore.utils;

import android.util.Log;

import java.util.Locale;

import cn.ubest.mvvmcore.BuildConfig;

/**
 * Content: log工具类
 * Created by wk on 2019/7/10
 */
public final class LogUtils {
    private static final String TAG = "++++DEBUG++++";
    private static boolean isDebug = BuildConfig.DEBUG; // 是否打印debug日志

    private LogUtils() {
        throw new UnsupportedOperationException("工具类不可初始化，请直接调用");
    }

    /**
     * 得到tag（所在类.方法（L:行））
     *
     * @return
     */
    private static String generateTag() {
        StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[4];
        String callerClazzName = stackTraceElement.getClassName();
        callerClazzName = callerClazzName.substring(callerClazzName.lastIndexOf(".") + 1);
        String tag = "%s.%s(L:%d)";
        tag = String.format(Locale.getDefault(), tag, new Object[]{callerClazzName, stackTraceElement.getMethodName(),
                Integer.valueOf(stackTraceElement.getLineNumber())});
        // 给tag设置前缀
        tag = TAG + ":" + tag;
        return tag;
    }

    public static void d(String msg) {
        if (isDebug) {
            Log.d(generateTag(), msg);
            FileUtils.writeLogFile(generateTag() + msg);
        }
    }

    public static void i(String msg) {
        if (isDebug) {
            Log.i(generateTag(), msg);
            FileUtils.writeLogFile(generateTag() + msg);
        }
    }

    public static void w(String msg) {
        if (isDebug) {
            Log.w(generateTag(), msg);
            FileUtils.writeLogFile(generateTag() + msg);
        }
    }

    public static void e(String msg) {
        if (isDebug) {
            Log.e(generateTag(), msg);
            FileUtils.writeLogFile(generateTag() + msg);
            FileUtils.writeLogFile(generateTag() + msg);
        }
    }

    public static void out(String msg) {
        if (isDebug) {
            System.err.println(generateTag() + msg);
            FileUtils.writeLogFile(generateTag() + msg);
        }
    }

    public static void d(String tag, String msg) {
        if (isDebug) {
            Log.d(tag, msg);
            FileUtils.writeLogFile(tag + msg);
        }
    }

    public static void i(String tag, String msg) {
        if (isDebug) {
            Log.i(tag, msg);
            FileUtils.writeLogFile(tag + msg);
        }
    }

    public static void w(String tag, String msg) {
        if (isDebug) {
            Log.w(TAG, msg);
            FileUtils.writeLogFile(tag + msg);
        }
    }

    public static void e(String tag, String msg) {
        if (isDebug) {
            Log.i(TAG, msg);
            FileUtils.writeLogFile(tag + msg);
        }
    }
}
